package myjava.c_wrap;

/**
 * @Auther: cty
 * @Date: 2019/11/4 10:38
 * @Description: 测试自动装箱、自动拆箱
 * @version: 1.0
 */
public class B_TestAutoBox {
    public static void main(String[] args) {
        Integer a = 234;  //自动装箱。编译器会改成：Integer a = Integer.valueOf(234);
        int b = a;  //自动拆箱。编译器会改成：int b = a.intValue();

        Integer c = null;
        if(c!=null){
            int d = c;  //自动拆箱。编译器会改成：c.intValue()
        }

        //测试缓存[-128,127]之间的数字
        //原理：在系统初始的时候，创建了[-128,127]之间的一个缓存数组。
        //当我们调用valueOf()的时候，首先检查是否在[-128,127]之间，如果在这个范围则直接从缓存数组中拿出数字；
        // 若不在这个范围，则创建新的Integer对象。
        Integer in1 = Integer.valueOf(-128);
        Integer in2 = -128;
        System.out.println(in1 == in2);  //true,因为-128在缓存范围内
        System.out.println("############################################");

        Integer in3 = 1234;
        Integer in4 = 1234;
        System.out.println(in3 == in4);  //false,因为1234在缓存范围内,两个是新建的不同对象
    }
}
